#include "registration.h"
#include "ui_registration.h"

#include <QMessageBox>
#include<QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
Registration::Registration(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Registration)
{
    ui->setupUi(this);
    setWindowTitle("注册"); // 设置窗口名称
    // 设置左上角图标
    this->setWindowIcon(QIcon(":/images/res/BitMap/key1.bmp"));
    // 加载json文件中的数据
    QFile file(dataFileName);
    if(file.exists()) // 文件存在才操作
    {
        // 读取文件中的数据 [{"name": "bob", "pwd": "123"}, {"name": "lucy", "pwd": "456"}]
        file.open(QIODevice::ReadOnly);
        QByteArray userData = file.readAll(); // 读取所有数据
        QJsonDocument userFromJson = QJsonDocument::fromJson(userData); // 将数据转换成json对象
        if(!userFromJson.isNull() && userFromJson.isArray())
        {
            QJsonArray userArray = userFromJson.array();
            for (const QJsonValue &qJsonValue : userArray) { // 遍历数据
                if(qJsonValue.isObject())
                {
                    QJsonObject object = qJsonValue.toObject();
                    QMap<QString,QString> map;
                    // 遍历所有键值对
                    for (auto it = object.constBegin(); it != object.constEnd(); ++it) {
                            map.insert(it.key(), it.value().toString());
                    }
                    users.push_back(map);
                }
            }
        }
        file.close(); // 关闭文件
    }
}

Registration::~Registration()
{
    // 析构时将用户数据写入文件
    writeUsers();
    delete ui;
}
bool Registration::isUserPwd(QString name, QString pwd)
{
    if(users.size() < 1)
    {
        return false;
    }
    // 遍历用户数据
    for (const QMap<QString, QString> &map : users) {
        if(map["name"] == name) // 找到用户
        {
            // 判断密码是否相等
            if(map["pwd"] == pwd)
                return true;
        }
    }
    return false;
}

void Registration::on_surePushButton_clicked()
{
    // 校验密码是否一致
    QString pwd = ui->pwdLineEdit->text();
    QString password = ui->passwordLineEdit->text();
    if(pwd != password)
    {
        QMessageBox::warning(this,"警告", "两次输入的密码不一致,请检查！");
        return;
    }
    userName = ui->nameLineEdit->text();
    this->password = pwd;
    QMap<QString, QString> map;
    map.insert("name", userName);
    map.insert("pwd", pwd);
    users.push_back(map); // 将用户信息加入到数据中
    writeUsers();
    // 跳转会登录页
    emit registToLogin();
}

void Registration::on_cancelPushButton_clicked()
{
    // 用户点击取消清空数据并返回
    ui->pwdLineEdit->setText("");
    ui->passwordLineEdit->setText("");
    ui->nameLineEdit->setText("");
    // 跳转会登录页
    emit registToLogin();
}

void Registration::writeUsers()
{
    QJsonArray jsonArray;
    // 遍历用户数据
    for (const QMap<QString, QString> &map : users) {
        QJsonObject jsonObj;
        for (auto it = map.constBegin(); it != map.constEnd(); ++it) {
            jsonObj.insert(it.key(), QJsonValue::fromVariant(it.value()));
        }
        jsonArray.append(jsonObj);
    }
    QJsonDocument jsonDoc(jsonArray);
    QByteArray jsonData = jsonDoc.toJson();
    // 写入文件
    QFile file(dataFileName);
    file.open(QIODevice::WriteOnly);
    file.write(jsonData);
    file.close();
}
